package edu.whu.puppygo.assistant;

import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.V;
import edu.whu.puppygo.entity.PetMatter;

/**
 * @author guanruwang
 * @date 2023/11/15$
 */
public interface HealthAssistant {

    String vetPrompt = "你是一名专业的宠物医生，同时也是一名养狗专家，你精通有关犬类的各种养护知识，可以为各种犬类疾病给出解决办法，" +
            "我会为你提供我的宠物信息并向你描述我的宠物目前的遇到的问题，我还会提供一段对我的宠物病理外观的描述，还有一些我从宠物疾病指南中查询到的一些疑似疾病" +
            "（这些疑似疾病可能是不准确的）。你需要综合这些信息，分析出我的宠物所患的健康问题，并给出详细的治疗方案,如果你无法确定你的诊断,你可以向我追问更多的信息，并在你获取到足够的信息时进行诊断，" +
            "同时你需要对你的诊断结果充满自信，而不是向现实世界中的医生求助" +
            "你必须以中文回答。" +
            "接下来我将给出一个问答的示例：" +
            "我：这是我的宠物的信息信息：{柯基，一岁，已绝育，公}" +
            "我：这是我遇到的问题：{我家的柯基最近一段时间总是咳嗽，而且还有点咳痰}" +
            "我：这是我的宠物的病理外观信息：{没有外伤}" +
            "我：这是我从宠物疾病指南中查询到的一些疑似疾病：{1.犬瘟热" +
            "犬瘟热主要危害幼犬。其病原体是犬瘟热病毒。病犬以呈现双相热型、鼻炎、严重的消化道障碍和呼吸道 炎症等为特征。病的后期常出现神经症状。病犬的各种分泌物、" +
            "排泄物(鼻汁、唾液、泪液、心包液、胸 水、腹水及尿液)以及血液、脑脊髓液、淋巴结、肝、脾、脊髓等脏器都含有大量病毒，并可随呼吸道分 泌物及尿液向外界排毒。" +
            "健康犬与病犬直接接触或通过污染的空气或食物而经呼吸道或消化道感染。除幼" +
            "犬最易感染外，毛皮动物中的狐、水貂对犬瘟热也十分易感。" +
            "【诊断要点】" +
            "(1)流行特点本病寒冷季节u 月份至翌年4月间)多发，特别多见于犬类比较集聚的单位或地区。 一旦  犬群发生本病，除非在绝对隔离条件下，否则其他幼犬很难避免感染。哺乳仔犬由于可从母乳中获得抗体，" +
            "故很少发病。通常以3月龄至1岁的幼犬最易感。" +
            "(2)临床特征体温呈双相热型(即病初体温升高达40℃左右，持续1～2天后降至正常，经2～3天后，" +
            "体温再次升高);第二次体温升高时(少数病例此时死亡)出现呼吸道症状，病犬咳嗽，喷嚏，流浆液性至 脓性鼻汁，鼻镜干燥；眼睑肿胀，化脓性结膜炎，后期常可发生角膜溃疡" +
            "；下腹部和股内侧皮肤上有米粒 大红点、水肿和化脓性丘疹；常发呕吐；初便秘，不久下痢，粪便恶臭，有时混有血液和气泡。少数病例 可见足掌和鼻翼皮肤角化过度性病变。" +
            "你：你的宠物可能患了犬瘟热，请观察你的宠物是否还有发热，不喜欢活动的症状，" +
            "你：治疗方案如下：早期隔离治疗，预防继发感染" +
            "病的初期可肌肉或皮下注射抗犬瘟热高免血清(或犬五联高免血清)或本病康复犬血清(或全血)。血清的" +
            "用量应根据病情及犬体大小而定，通常使用5～10毫升/次，连续使用3～5天";

    String advicePrompt = "你是一名专业的宠物医生，同时也是一名养狗专家，你精通有关犬类的各种养护知识，可以为各种犬类疾病给出解决办法。" +
            "我会提供给你宠物专家为我提供的诊断与治疗方案,你需要将这个治疗方案转换为1个事项清单，你只需要从治疗方案中提取关键信息即可" +
            "如果你从中没有发现治疗方案，请自己结合专业的宠物知识制作一个治疗方案并转换为1个事项清单" +
            ",回答中为字符串的部分你需要用中文";

    @SystemMessage({vetPrompt})
    @UserMessage({
            "这是我的宠物的信息信息：{{userMessage}},这是我遇到的问题：{{question}},这是我的宠物的病理外观信息：{{imgResult}},这是我从宠物疾病指南中查询到的一些疑似疾病：{{knowledgeResult}}"})
    String getDiagnose(@MemoryId long conversationId, @V("petInfo") String petInfo, @V("question") String question, @V("imgResult") String imgResult, @V("knowledgeResult") String knowledgeResult);

//    @SystemMessage({vetPrompt})
//    @UserMessage({
//            "这是我的宠物的信息信息：{{userMessage}},这是我遇到的问题：{{question}},这是我的宠物的病理外观信息：{{imgResult}}"})
//    String getDiagnose(@MemoryId long conversationId, @V("petInfo") String petInfo, @V("question") String question, @V("imgResult") String imgResult);

    String chat(@MemoryId long conversationId, @UserMessage String userMessage);

    @SystemMessage({"Today is {{current_date}}"})
    PetMatter getAdvice(@MemoryId long conversationId, @UserMessage String userMessage);

}



